"""
属性介绍：
    概述：
        属性 = 名词， 是描述事物的外在特征的，例如：姓名、年龄
    分类：
        对象属性：   属于每个对象的属性，即：A对象修改了它的属性值，不会影响B对象的属性值
        类属性：    它是属于该类的所有对象所共享的，即：A对象修改了类属性，则B对象用的是修改后的属性值。

    对象属性的相关格式：
        定义格式：
            类外：对象名.属性名 = 属性值
            类内：self.属性名 = 属性值
        获取属性值的格式：
            类外：对象名.属性名
            类内：self.属性名

    类属性：
        定义格式：
            定义在类中，函数外的变量，就叫：类变量，能够被该类下所有的对象所共享。
        调用格式：
            方式1: 类名.类属性名
            方式2：对象名.类属性名

"""
# 需求：定义学生类，有name属性，teacher_name属性，创建学生类对象，并测试。
class Student(object):
    teacher_name = "张三"

    def __init__(self):
        self.name = "老张"

if __name__ == '__main__':
    # 创建学生对象
    s1 = Student()
    s2 = Student()

    # 打印对象属性值
    print(f"s1对象的name属性值：{s1.name}")
    print(f"s2对象的name属性值：{s2.name}")
    print("-----------------------------")

    s1.name = "小张"
    print(f"s1对象的name属性值：{s1.name}")
    print(f"s2对象的name属性值：{s2.name}")
    print("-----------------------------")

    print(f"s1对象的类属性值：{s1.teacher_name}")
    print(f"s2对象的类属性值：{s2.teacher_name}")
    print("-----------------------------")

    Student.teacher_name = "小张三"
    print(f"s1对象的类属性值：{s1.teacher_name}")
    print(f"s2对象的类属性值：{s2.teacher_name}")

    # 类属性名，推荐使用，类名.的方式调用
    print(Student.teacher_name)
